#include<bits/stdc++.h>
#define ll long long
#define p 1000000007
using namespace std;
ll n,m,x,y,a[1000010],ans;
string s;
ll qpow(ll x,ll y,ll z){ll ans=1;for(;y;x=x*x%z,y>>=1)if(y&1)ans=ans*x%z;return ans;}
void dfs(ll st){
	if(st>n){
		int s=0;
		for(int i=2;i<=n;i++)s^=a[i]*a[i-1]%(1<<m);
		ans=(ans+s)%p;
		return;
	}
	if(st==x){dfs(st+1);return;}
	for(int i=0;i<(1<<m);i++)a[st]=i,dfs(st+1);
}
int main(){
	freopen("pearl.in","r",stdin);
	freopen("pearl.out","w",stdout);
	cin>>n>>m>>x>>s;
	for(int i=0;i<m;i++)y+=(s[i]-48)<<i;
	if(m==1){
		if(n==1)cout<<0;
		else if(n&1){
			if(x&1)cout<<(qpow(2,n-2,p)-qpow(2,n/2-1,p)+p)%p;
			else if(y==1)cout<<qpow(2,n-2,p);
			else cout<<(qpow(2,n-2,p)-qpow(2,n/2,p)+p)%p;
		}else{
			if(y==1)cout<<qpow(2,n-2,p);
			else cout<<(qpow(2,n-2,p)-qpow(2,n/2-1,p)+p)%p;
		}
		return 0;
	}
	a[x]=y,dfs(1),cout<<ans;
	return 0;
}
